iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
自我挑戰組

Ruby名詞解釋總匯系列 第 10

Day 10 : Ruby的「物件導向程式設計-類別」

  • 分享至 

  • xImage
  •  

類別與實體 class and instance

*英文發音
首先來聽聽英文發音~。
class
Yes

instance
Yes

什麼是類別呢?

這裡例舉個實際的例子讓大家明白。

首先請問大家,有沒有吃過紅龜粿呢>ˇ</!我最喜歡吃這種古早味的點心了,雖然吃下去會很胖也很常噎到,但是包蘿蔔絲的素食紅龜粿或草仔粿好好吃唷~,都會很珍惜、小心翼翼地、滿懷感激吃下去。

那麼,紅龜粿和類別有什麼關聯呢?咳咳,是這樣子的,製作紅龜粿會有個模具,稱之為「粿模」(或叫做「粿印」、「粿模」、「餅印」),在傳統的農業社會時代,每逢年過節,家家戶戶都會使用各式各樣的「粿模」印製代表吉祥、長壽、豐收......等各種不同樣貌的紅龜粿唷!

同樣的模具,可以印製多個長得相同的紅龜粿,這就是「類別(Class
)」的概念,紅龜粿則是屬於該類別的物件,就稱為「實體(Instance)」。

如何定義類別?

在Ruby世界中,要建置一個物件,首先要定義類別的特徵,然後建立一個實體。

使用class...end來實現這件事,並在範圍中定義類別的方法(method)def...end,對應於該類別物件的某些行為。

要注意的是:類別的命名規則,必須是「常數」,也就是首字英文字母要大寫。

範例如下:

class Rabbit
  def eat(food)
    puts "#{food}好吃營養又健康!"
  end
end

PS:在字串裡面使用#{},便可以使用定義好的變數

產生實體

定義好Rabbit類別後,便可以產生許多相同的實體,並賦予他們不同的行為唷。

範例:

melody = Rabbit.new
rhythm = Rabbit.new

melody.eat "蔬菜"
-> # 印出來 蔬菜好吃營養又健康!
ryhthm.eat "紅蘿蔔"
-> # 印出來 紅蘿蔔好吃營養又健康!

繼承

說到類別,也會同樣講到繼承。

日常生活中的物件類別都會分有階層,如我們所熟悉的生物分類法:界、門、綱、目、科、屬、種。

兔子哺乳類,而哺乳類都屬於動物。由這樣的概念推導,我們將共同特徵分在同一類,較小的類別會繼承 (inherit) 具有所屬較大類別的特徵。如果所有哺乳類都會吃東西,那麼所有兔子也會吃東西。

範例:

class Animal
  def eat
    puts "食物好吃!"
  end
end

class Rabbit < Animal
  def speak
    puts "我愛你"
  end
end

melody = Rabbit.new
melody.eat
-> # 印出來 食物好吃
melody.speak
-> # 印出來 我愛你

new出來的melody繼承Animal,因此同時具有eat、speak的方法唷!

實體變數(instance variable)

在實務上,在設計Rails專案時,最常使用的是「實體變數(instance variable)」。

實體變數的寫法為在變數前面加一個@,顧名思義,是活在每個實體裡的變數,而且每個實體之間互不相影響。

在Rails專案中,可以串連Controller與View之間的關聯唷。

參考資料


上一篇
Day 9 : Ruby的「物件導向程式設計-物件」
下一篇
# Day 11 : Ruby的「物件導向程式設計-方法」
系列文
Ruby名詞解釋總匯14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言